#ifndef GGE_H_INCLUDED                              /* Ultima revision 14/05/2001 17:14 */
#define GGE_H_INCLUDED

#include <stdlib.h>                                 // Librerias necesarias de C++
#include <time.h>
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <math.h>

#include <SDL/SDL.h>                                // Librerias necesarias de SDL
#include <SDL/SDL_image.h>
#include <SDL/SDL_mixer.h>
#include <SDL/SDL_ttf.h>
#include <SDL/SDL_net.h>
//#include <id3/tag.h>

#include <GL/glut.h>                                // Librerias necesarias de Opengl

#include "GGE_Entity2D.h"                           // Librerias del motor grafico
#include "GGE_Text.h"
#include "GGE_eMotion.h"
#include "GGE_Sound.h"
#include "GGE_DEFINES.h"

using namespace std;

class GGE                                           // Clase principal del motor GGE
{
private:
  int             varGGE_INIT_FLAG;               // Valor de inicio.
  int             varGGE_MODE_FLAG;               // Valor del modo grafico.
  int             varGGE_WIDTH;                   // Altura de la pantalla.
  int             varGGE_HEIGHT;                  // Anchura de la pantalla.
  int             varGGE_BPP;                     // Profundidad de color.
  Uint32          varGGE_UINT_FLAG;               // Flags para iniciar la libreria SDL.
  SDL_Surface *   varGGE_WINDOW_SURFACE;          // Superficie de la pantalla.
  SDL_Event       varGGE_EVENT;                   // Evento para el metodo GGE_Loop.
  bool            varGGE_LOOP;                    // Booleana para el metodo GGE_Loop.

  TTF_Font * ttfFont;
  SDL_Color ttfColor;
  SDL_Rect  ttfRect;
  SDL_Surface * initial;
  int w,h;


public:
  void Init   ( int initFlag );               // Inicia las librerias graficas que usa el motor.
  void Exit   ( void );                       // Sale de la aplicacion.
  void Mode   ( int modeFlag );               // Establece el modo grafico.
  void Screen ( int xFlag, int yFlag,         // Crea la pantalla principal.
                int bppFlag,
                const char appName[255] );
  int  Loop   ( void );                       // Crea un bucle hasta que se pulse una tecla o se cierre la ventana.
  void Flip   ( void );                       // Refresca los buffers de video.
  void Clear  ( void );

  void LoadTTF    ( const char * varGGE_UrlTtf, int varSize);
  void Write      ( int varX, int varY, const char * varGGE_MSG_STRING );
  void Write      ( int varX, int varY, int varGGE_MGS_INT);
  GGE();
  ~GGE();
};

#endif
